SQL COUNT 関数について調べてみた
こんにちは!よしななです。
業務中に SQL のCOUNT
集計関数を使う機会があったのですが、挙動についてわからない部分があったので備忘録としてまとめます。
目次
- 実行環境
- COUNT 関数とはなにか
- COUNT 関数使用例
- かっこの中身について
- COUNT(*)
- COUNT(1)
- COUNT(
カラム名
) - COUNT(DISTINCT
カラム名
)
- WHERE を使用し、条件をつけて COUNT してみる
実行環境
本記事では、Amazon Athena で SQL を実行しています。
以下の .jsonl データを Amazon S3 にアップロード済みです。
{"ID": 1, "employee_name": "山田太郎", "department": "sales", "age": 30} {"ID": 2, "employee_name": "佐藤花子", "department": "manager", "age": 25} {"ID": 3, "employee_name": "田中一郎", "department": null, "age": 22} {"ID": 4, "employee_name": "伊藤美咲", "department": "engineer", "age": 27} {"ID": 5, "employee_name": "渡辺健", "department": "manager", "age": 35} {"ID": 6, "employee_name": "小山裕太", "department": "sales", "age": 29} {"ID": 7, "employee_name": "吉川美波", "department": "engineer", "age": 25} {"ID": 8, "employee_name": "井上俊", "department": "engineer", "age": 37}
上記 .jsonl データは ChatGPT を使用して生成しています。
上記 .jsonl データをもとにCREATE TABLE
を実行し、Amazon Athena 上にemployee_users
テーブルを作成しています。
※CREATE TABLE
手順は こちらの記事 を参考にしてください。
COUNT 関数とはなにか
COUNT
関数とは SQL 集計関数の一つで、レコード数を数えるために使用します。
使い方の例は以下の通りです。
SELECT COUNT(column_name) FROM table_name WHERE condition;
column_name
- カウントする行の中で特定の列を指定します。
table_name
- データを抽出するテーブルの名前を指定します。
WHERE
- 特定の条件を満たす行のみをカウントしたい場合に
condition
をWHERE
で指定します。 - 特に条件が無い場合は、
WHERE
は不要です。
- 特定の条件を満たす行のみをカウントしたい場合に
COUNT 関数使用例
例えば、ユーザーデータが格納された、user
テーブルがあります。
user
テーブルに含まれるレコードの数を数えたいときに、COUNT
関数を使用します。
以下の SQL クエリを Amazon Athena で実行すると…
SELECT COUNT(*) AS department FROM employee_users;
employee_users
テーブルのレコードは8
行あるので、以下の通り8
が返ります。
COUNT 関数の () の中身について
COUNT
関数の構文を調べるために、ドキュメントや色々なサイトを参考にしていたのですが、COUNT()
の構文が複数あり、混乱したのでそれぞれの挙動についてまとめておきます。
COUNT(*)
このパターンはテーブルのすべての行をカウントします。
NULL
の値を持つ行も含めてテーブル内の全ての行がカウントされます。
テーブルに含まれるレコードの総数を知りたい時に便利です。
SELECT COUNT(*) AS department FROM employee_users;
employee_users
テーブルは8行あるので、下記の通り8
が返ります。
COUNT(1)
こちらのパターンもテーブルのすべての行をカウントします。
NULL
の値を持つ行も含めてテーブル内の全ての行がカウントされます。
テーブルに含まれるレコードの総数を知りたい時に便利です。
SELECT COUNT(1) AS department FROM employee_users;
employee_users
テーブルは8行あるので、下記の通り8
が返ります。
COUNT(カラム名
)
このパターンでは指定されたカラム内の値をカウントします。
NULL
値はカウントされません。
特定のカラムに対する非NULL
の値の数がどれだけあるかを知りたい場合に便利です。
SELECT COUNT(department) AS department FROM employee_users;
employee_users
テーブルのdepartment
カラムにはNULL
が1
行含まれるため、NULL
レコードを抜いた7
が返ります。
COUNT(DISTINCT カラム名
)
このパターンは指定されたカラム内の異なる(ユニークな)値の数をカウントします。
重複する値は一つとしてカウントされ、ユニークな値のみがカウントの対象になります。
特定のカラム内にどれだけのユニークな値が存在するかを知りたい時に便利です。
SELECT COUNT(DISTINCT department) AS department FROM employee_users;
employee_users
テーブルのdepartment
カラムにはsales
,manager
,engineer
の3つがユニークな値として登録されているため、下記の通り3
が返ります。
WHERE を使用し、条件をつけて COUNT してみる
WHERE
句を使用して、特定の条件を満たす行のみをCOUNT
することができます。
employee_users
テーブルのsales
が何人いるかを数えたい場合、カラム名
= 絞り込みたい文字列(今回は sales)
で絞り込みができます。
SELECT COUNT(*) AS sales FROM employee_users WHERE department = 'sales';
department
カラムにはsales
が2レコードあるので、下記の通り2
が返ります。
上記の通り、COUNT
関数を使用して様々な条件でレコードのカウントができます。
ここまで読んでいただきありがとうございました!